"""
693. 交替位二进制数
简单
相关标签
premium lock icon
相关企业
给定一个正整数，检查它的二进制表示是否总是 0、1 交替出现：换句话说，就是二进制表示中相邻两位的数字永不相同。



示例 1：

输入：n = 5
输出：true
解释：5 的二进制表示是：101
示例 2：

输入：n = 7
输出：false
解释：7 的二进制表示是：111.
示例 3：

输入：n = 11
输出：false
解释：11 的二进制表示是：1011.


提示：

1 <= n <= 231 - 1

"""


class Solution:
    def hasAlternatingBits(self, n: int) -> bool:
        #二进制进行判断是真优雅
        a = n ^ (n >> 1) #101 ^ 010 ^ 有一个1就是1
        #如果是交替数就是全1111,判断是否全是1
        #1111 & 10000就是0就是交替数
        return (a & (a + 1)) == 0 #判断是否全是1
    def hasAlternatingBits(self, n: int) -> bool:
        isOne = n & 1 == 1
        n = n>>1
        while n != 0:
            curOne = n & 1 == 1
            if curOne == isOne:
                return False
            isOne = not isOne
            n =n>>1

        return True
if __name__ == '__main__':
    print(Solution().hasAlternatingBits(5))